// Copyright )1997 Easter-eggs. All Rights Reserved.

DefConst('kEEEngineUnitName, "EEEngine");
DefConst('kEEEngineUnitString, "Engine:Eggs");
DefConst('kEEEngineUnitSymbol, Intern(kEEEngineUnitString));
DefConst('kEEEngineToolboxSymbol, Intern("toolbox:" & kEEEngineUnitString));
DefConst('kEEEngineMajorVersion, 1);
DefConst('kEEEngineMinorVersion, 0);
DefConst('kEEEngineVersionString, kEEEngineMajorVersion & $. & kEEEngineMinorVersion);


DefConst('kEEEngineUnitDeclaration, {
			EEStartupEngine: 0,
			eeState: 1,
			eeStateMachine: 2,
			eeTool: 3,
			eeEndpointTool: 4,
			eeConnectedEndpointTool: 5,
		});

DeclareUnit(kEEEngineUnitSymbol, kEEEngineMajorVersion, kEEEngineMinorVersion, kEEEngineUnitDeclaration);
if kAppSymbol <> kEEEngineUnitSymbol then
	begin
		DeclareGlobalFn('ImpureUnitReference, 2);
		DefGlobalFn('ImpureUnitReference, constantFunctions.UnitReference);
		foreach slot, value in kEEEngineUnitDeclaration do
			DefConst(slot, ImpureUnitReference(kEEEngineUnitSymbol, slot));
	end;


DefConst('kCancellingStatusString, if language = 'french then
			"Annulation"
		else
			"Cancelling");


DefConst('GetEEEngineTool, func(symbol)
		begin
			local toolbox := GetGlobalVar(kEEEngineToolboxSymbol);
			return if toolbox then
						toolbox.(symbol);
		end);

DefConst('RegEEEngineTool, func(symbol, tool)
		begin
			if not GlobalVarExists(kEEEngineToolboxSymbol) then
				DefGlobalVar(kEEEngineToolboxSymbol, {});
			GetGlobalVar(kEEEngineToolboxSymbol).(EnsureInternal(symbol)) := tool;
		end);

DefConst('UnRegEEEngineTool, func(symbol)
		begin
			if GlobalVarExists(kEEEngineToolboxSymbol) then
				begin
					local toolbox := GetGlobalVar(kEEEngineToolboxSymbol);
					RemoveSlot(toolbox, symbol);
					if Length(toolbox) = 0 then
						UnDefGlobalVar(kEEEngineToolboxSymbol);
				end;
		end);
